/**
*自动滚动的字,鼠标滑上或者
*
*注意字的最后要加上一个英文的" "
* 
* 分析一下他的功能
 * 1,平时不显示半个字
 * 2，鼠标在上要变色，太长则滚动
 * 3,鼠标离开颜色变回，停止在原来的地方
 * 4,点了要能到目的地
*/
package kgame5.kgui.kcomp {
import kgame5.kutil.*;

import flash.display.*;
import flash.events.*;
import flash.text.*;

public class SmartText{
	//____________Property________________
	//模型,由mc_mask和mc_tf.tf组成
	private var tf:TextField;
	
	//
	private var text:String="";
	
	private var aimUrl:String="";
	
	public var 
		Color0:int=0xffffff,//平时颜色
		Color1:int=0x999900;//鼠标在上的颜色
		
	private var Speed:int=2;
	
	private var initW:int;//初始的时候指定的tf的Width,这个需要一直保存，因为SetText需要设置不显示半个字
	//____________Method____________________
	public function SmartText(p_tf:TextField,W:int=-1,H:int=-1,p_text:String="",color0:int=0xff0000,color1:int=0x000000,myUrl:String="",p_speed:int=2){
		//--
		tf=p_tf;
		
		if(W!=-1){
			initW=W;
		}else{
			initW=tf.width;
		}
		tf.width=initW;
		
		if(H!=-1){
			tf.height=H;
		}
		
		tf.selectable=false;
		
		//--
		SetText(p_text);
		
		Color0=color0;
		Color1=color1;
		
		SetColor(Color0);
		
		SetURL(myUrl);
		
		Speed=p_speed;
		
	}
	public function getDO():DisplayObject{
		return tf;
	}
	public function dispose(){
		Util.RemoveMovieClip(this.getDO());
	}
	public function SetText(p_text:String){
		//保存值
		text=p_text;
		
		
		//计算一个合适的长度
		tf.width=calcFitMaskWidth(tf,p_text,initW);
		
		//设置字
		tf.text=text;//后面要加空格，要不有字的下半部分显示不全
		
		if(tf.textWidth>tf.width){//如果需要滚动
			//这个要加2个同样的话，为了滚动用,ok 凑合者还可以
			tf.text=text+"   "+text+"   ";
		}
	}
	
	//点了字之后打开的url
	public function SetURL(p_url:String){
		aimUrl=p_url;
		
		//使用弱引用表示tf被删除的时候就能被垃圾收集，否则他饿监听听器会持有他的引用导致垃圾收集失效
		tf.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler,false,0,true);
	}
	private function mouseDownHandler(e:MouseEvent){
		Util.getURL(aimUrl);
	}
	
	public function SetColor(textColor:int){
		tf.textColor=textColor;
	}
	
	/*
	//计算一个合适的mask的Width,保证不会有半个字的情况
	private function calcFitMaskWidth(tf:TextField,s:String,w:Number):Number{
		var len:Number=s.length;
		for(var i=0;i<len;i++){
			var s2:String=s.substring(0,i+1);
			tf.text=s2;
			if(tf.textWidth>w){
				
				tf.text=s.substring(0,i-1+1);
				var maskWidth:Number=tf.textWidth+2;
				tf.text="test!!!";//tf.text就是测试用的
				return maskWidth;
			}
		}
	}
	//*/
	
	private var bScrolling:Boolean=false;
	//启动开始滚动
	public function StartScroll(){
		bScrolling=true;
		////T.p("StartScroll");
		tf.scrollH=0;
		tf.addEventListener(Event.ENTER_FRAME,enterFrameHandler,false,0,true);
		
	}
	public function StopScroll(){
		bScrolling=false;
		////T.p("StopScroll");
		tf.scrollH=0;
		tf.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
		
	}
	private function enterFrameHandler(e:Event){
		tf.scrollH+=Speed;
		//trace(tf.scrollH);
		if(tf.scrollH>tf.textWidth/2){
			tf.scrollH-=tf.textWidth/2;//-=tf.textWidth/2+tf.width;
		}
	}
	//这个函数就是响应鼠标滚进滚出的
	public function OnLoad(){
		tf.addEventListener(MouseEvent.ROLL_OVER,mouseOverHandler,false,0,true);
		tf.addEventListener(MouseEvent.ROLL_OUT,mouseOutHandler,false,0,true);
	}
	private function mouseOverHandler(e:MouseEvent){
		SetColor(Color1);
		//T.p("~~~~~~~~~~滚入了滚动区域");
		StartScroll();
	}
	private function mouseOutHandler(e:MouseEvent){
		SetColor(Color0);
		//T.p("~~~~~~~~~~滚出了滚动区域");
		StopScroll();
	}
	
	//**************
	//计算一个合适的mask的Width,保证不会有半个字的情况
	private function calcFitMaskWidth(tf:TextField,s:String,w:int):int{
		var i:int;
		var len:int=s.length;
		for(i=0;i<len;i++){
			var s2:String=s.substring(0,i+1);
			tf.text=s2;
			if(tf.textWidth>w){
				
				tf.text=s.substring(0,i-1+1);
				var maskWidth:int=tf.textWidth+3;
				tf.text="test!!!";//tf.text就是测试用的
				return maskWidth;
			}
		}
		return w;//如果没超过长度
	}
	
}//end of class
}